// 用户认证工具函数
import request from './request.js'
import { API_ENDPOINTS } from './api.js'

// 保存用户信息到localStorage
// 注意：只保存用户对象，不要保存整个响应
export const saveUserInfo = (userInfo) => {
  localStorage.setItem('user_info', JSON.stringify(userInfo))
}

// 保存认证token到localStorage
export const saveAuthToken = (token) => {
  localStorage.setItem('auth_token', token)
}

// 获取用户信息
export const getUserInfo = () => {
  try {
    return JSON.parse(localStorage.getItem('user_info') || '{}')
  } catch (error) {
    console.error('获取用户信息失败:', error)
    return {}
  }
}

// 获取认证token
export const getAuthToken = () => {
  return localStorage.getItem('auth_token')
}

// 获取当前用户ID
export function getCurrentUserId() {
  return localStorage.getItem('userid') || ''
}

// 检查用户是否已登录
export const isLoggedIn = () => {
  const token = getAuthToken()
  const userInfo = getUserInfo()
  return !!(token && userInfo.id)
}

// 清除用户认证信息
export const clearAuth = () => {
  localStorage.removeItem('auth_token')
  localStorage.removeItem('user_info')
}

// 用户登录
export const login = async (username, password) => {
  try {
    const response = await request.post(API_ENDPOINTS.USER.LOGIN, {
      username,
      password
    })
    // 修正：后端返回结构为 { code, msg, data: { token, user } }
    const { token, user } = response.data.data
    // 保存认证信息
    saveAuthToken(token)
    saveUserInfo(user) // 只保存user对象
    return { success: true, user }
  } catch (error) {
    console.error('登录失败:', error)
    throw error
  }
}

// 用户登出
export const logout = async () => {
  try {
    // 调用后端登出API
    await request.post(API_ENDPOINTS.USER.LOGOUT)
  } catch (error) {
    console.error('登出API调用失败:', error)
  } finally {
    // 清除本地认证信息
    clearAuth()
  }
}

// 获取用户资料
export const getUserProfile = async () => {
  try {
    const response = await request.get(API_ENDPOINTS.USER.PROFILE)
    const userInfo = response.data.data // 只取data字段
    // 更新本地用户信息
    saveUserInfo(userInfo)
    return userInfo
  } catch (error) {
    console.error('获取用户资料失败:', error)
    throw error
  }
}

// 检查token是否有效
export const checkAuthStatus = async () => {
  if (!isLoggedIn()) {
    return false
  }
  
  try {
    await getUserProfile()
    return true
  } catch (error) {
    // token无效，清除认证信息
    clearAuth()
    return false
  }
} 